قدرت GroupBy در Pandas را برای تجزیه و تحلیل داده ها آزاد کنید. این راهنما تکنیک های تجمیع و تبدیل را با مثال های عملی برای داده های بین المللی بررسی می کند.
تسلط بر عملیات GroupBy در Pandas: تجمیع در مقابل تبدیل
Pandas، سنگ بنای دستکاری داده ها در پایتون، ابزاری قدرتمند برای تجزیه و تحلیل و درک داده ها ارائه می دهد: عملیات GroupBy. این ویژگی به شما امکان می دهد داده های خود را بر اساس ویژگی های مشترک به گروه ها تقسیم کنید و سپس توابعی را بر روی این گروه ها اعمال کنید، و بینش هایی را آشکار می کند که در غیر این صورت پنهان می مانند. این مقاله به بررسی عمیق دو عملیات کلیدی GroupBy می پردازد: تجمیع و تبدیل، و مثال ها و توضیحات عملی مناسب برای متخصصان داده در سراسر جهان ارائه می دهد.
درک مفهوم GroupBy
در هسته خود، GroupBy فرآیندی است که شامل سه مرحله اصلی است: تقسیم داده ها به گروه ها بر اساس یک یا چند معیار، اعمال یک تابع به هر گروه به طور مستقل، و ترکیب نتایج در یک ساختار داده جدید. این استراتژی "تقسیم-اعمال-ترکیب" یک مفهوم اساسی در تجزیه و تحلیل داده ها است و چارچوبی انعطاف پذیر برای بررسی مجموعه داده های پیچیده فراهم می کند.
قدرت GroupBy در توانایی آن در مدیریت انواع داده ها و ساختارها نهفته است، و آن را در دامنه های مختلف قابل استفاده می کند. چه در حال تجزیه و تحلیل داده های فروش از مناطق مختلف باشید، چه داده های حسگر از دستگاه های مختلف، یا فعالیت رسانه های اجتماعی در بین جمعیت های مختلف، GroupBy می تواند به شما در استخراج بینش های معنادار کمک کند.
تجمیع: خلاصه کردن داده ها در گروه ها
تجمیع فرآیند محاسبه آمار خلاصه برای هر گروه است. این آمار یک نمای کلی مختصر از ویژگی های گروه ارائه می دهد و به شما امکان می دهد بخش های مختلف داده های خود را مقایسه و تضاد کنید. توابع تجمیع رایج عبارتند از:
sum(): مجموع مقادیر را در هر گروه محاسبه می کند.mean(): میانگین مقدار را در هر گروه محاسبه می کند.median(): مقدار میانی را در هر گروه محاسبه می کند.min(): حداقل مقدار را در هر گروه پیدا می کند.max(): حداکثر مقدار را در هر گروه پیدا می کند.count(): تعداد مقادیر غیر تهی را در هر گروه می شمارد.size(): اندازه هر گروه را برمی گرداند (از جمله تهی ها).std(): انحراف معیار را در هر گروه محاسبه می کند.var(): واریانس را در هر گروه محاسبه می کند.
مثال های عملی از تجمیع
بیایید مجموعه داده ای از داده های فروش بین المللی برای یک شرکت تجارت الکترونیک فرضی را در نظر بگیریم. این داده ها شامل اطلاعاتی در مورد دسته بندی محصول، کشور فروش و مبلغ فروش است.
import pandas as pd
# Sample data
data = {
'Category': ['Electronics', 'Clothing', 'Electronics', 'Clothing', 'Home Goods', 'Electronics', 'Clothing', 'Home Goods'],
'Country': ['USA', 'UK', 'Canada', 'USA', 'Germany', 'UK', 'Canada', 'Germany'],
'Sales': [100, 50, 75, 60, 80, 90, 45, 70]
}
df = pd.DataFrame(data)
print(df)
این خروجی را نشان می دهد:
Category Country Sales
0 Electronics USA 100
1 Clothing UK 50
2 Electronics Canada 75
3 Clothing USA 60
4 Home Goods Germany 80
5 Electronics UK 90
6 Clothing Canada 45
7 Home Goods Germany 70
مثال 1: محاسبه کل فروش به ازای هر دسته بندی
برای محاسبه کل فروش برای هر دسته بندی محصول، می توانیم از روش groupby() و به دنبال آن تابع تجمیع sum() استفاده کنیم.
category_sales = df.groupby('Category')['Sales'].sum()
print(category_sales)
این خروجی را نشان می دهد:
Category
Clothing 155
Electronics 265
Home Goods 150
Name: Sales, dtype: int64
مثال 2: محاسبه میانگین فروش به ازای هر کشور
به طور مشابه، برای محاسبه میانگین فروش به ازای هر کشور، می توانیم از تابع تجمیع mean() استفاده کنیم.
country_sales = df.groupby('Country')['Sales'].mean()
print(country_sales)
این خروجی را نشان می دهد:
Country
Canada 60.0
Germany 75.0
UK 70.0
USA 80.0
Name: Sales, dtype: float64
مثال 3: استفاده از چندین تابع تجمیع
Pandas به شما امکان می دهد چندین تابع تجمیع را به طور همزمان با استفاده از روش agg() اعمال کنید. این یک خلاصه جامع از ویژگی های گروه ارائه می دهد.
category_summary = df.groupby('Category')['Sales'].agg(['sum', 'mean', 'median', 'count'])
print(category_summary)
این خروجی را نشان می دهد:
sum mean median count
Category
Clothing 155 51.666667 50.0 3
Electronics 265 88.333333 90.0 3
Home Goods 150 75.000000 75.0 2
مثال 4: توابع تجمیع سفارشی
همچنین می توانید توابع تجمیع سفارشی خود را با استفاده از عبارات لامبدا یا توابع نامگذاری شده تعریف کنید. این به شما امکان می دهد آمار خاصی را محاسبه کنید که در توابع تجمیع استاندارد موجود نیستند.
# Custom function to calculate the range (max - min)
def custom_range(x):
return x.max() - x.min()
category_summary = df.groupby('Category')['Sales'].agg(['sum', 'mean', custom_range])
print(category_summary)
این خروجی را نشان می دهد:
sum mean custom_range
Category
Clothing 155 51.666667 15
Electronics 265 88.333333 25
Home Goods 150 75.000000 10
تبدیل: تغییر داده ها در گروه ها
تبدیل، از طرف دیگر، شامل تغییر داده ها در هر گروه بر اساس برخی محاسبات است. برخلاف تجمیع، که یک مقدار خلاصه شده برای هر گروه برمی گرداند، تبدیل برای هر ردیف در داده های اصلی یک مقدار برمی گرداند، اما مقدار بر اساس گروهی که آن ردیف به آن تعلق دارد محاسبه می شود. عملیات تبدیل، شاخص اصلی و شکل DataFrame را حفظ می کنند.
موارد استفاده رایج برای تبدیل عبارتند از:
- استانداردسازی داده ها در هر گروه.
- محاسبه رتبه یا درصد در هر گروه.
- پر کردن مقادیر از دست رفته بر اساس آمار گروه.
مثال های عملی از تبدیل
بیایید با داده های فروش بین المللی خود ادامه دهیم. ما می توانیم تبدیل را برای انجام محاسبات مربوط به ارقام فروش در هر کشور اعمال کنیم.
مثال 1: استانداردسازی داده های فروش در هر کشور (Z-score)
استانداردسازی داده ها شامل تبدیل مقادیر به گونه ای است که میانگین 0 و انحراف معیار 1 داشته باشد. این برای مقایسه داده ها در مقیاس ها و توزیع های مختلف مفید است. ما می توانیم از روش transform() همراه با یک عبارت لامبدا برای دستیابی به این هدف استفاده کنیم.
from scipy.stats import zscore
df['Sales_Zscore'] = df.groupby('Country')['Sales'].transform(zscore)
print(df)
این خروجی را نشان می دهد:
Category Country Sales Sales_Zscore
0 Electronics USA 100 1.000000
1 Clothing UK 50 -1.000000
2 Electronics Canada 75 1.000000
3 Clothing USA 60 -1.000000
4 Home Goods Germany 80 1.000000
5 Electronics UK 90 1.000000
6 Clothing Canada 45 -1.000000
7 Home Goods Germany 70 -1.000000
ستون Sales_Zscore اکنون حاوی مقادیر فروش استاندارد شده برای هر کشور است. مقادیر بالاتر از 0 بالاتر از میانگین فروش برای آن کشور هستند، و مقادیر زیر 0 زیر میانگین هستند.
مثال 2: محاسبه رتبه فروش در هر دسته بندی
برای محاسبه رتبه هر فروش در دسته بندی خود، می توانیم از روش rank() در تابع transform() استفاده کنیم.
df['Sales_Rank'] = df.groupby('Category')['Sales'].transform(lambda x: x.rank(method='dense'))
print(df)
این خروجی را نشان می دهد:
Category Country Sales Sales_Zscore Sales_Rank
0 Electronics USA 100 1.000000 3.0
1 Clothing UK 50 -1.000000 2.0
2 Electronics Canada 75 1.000000 1.0
3 Clothing USA 60 -1.000000 3.0
4 Home Goods Germany 80 1.000000 2.0
5 Electronics UK 90 1.000000 2.0
6 Clothing Canada 45 -1.000000 1.0
7 Home Goods Germany 70 -1.000000 1.0
ستون Sales_Rank رتبه هر فروش را در دسته بندی مربوطه نشان می دهد. آرگومان `method='dense'` تضمین می کند که رتبه های متوالی بدون شکاف اختصاص داده می شوند.
مثال 3: پر کردن مقادیر از دست رفته بر اساس میانگین گروه
بیایید مقداری مقدار از دست رفته در داده های فروش وارد کنیم و سپس آنها را بر اساس میانگین فروش برای هر کشور پر کنیم.
import numpy as np
# Introduce missing values
df.loc[[0, 3], 'Sales'] = np.nan
print(df)
# Fill missing values based on country mean
df['Sales_Filled'] = df['Sales'].fillna(df.groupby('Country')['Sales'].transform('mean'))
print(df)
DataFrame اولیه با مقادیر از دست رفته به این صورت خواهد بود:
Category Country Sales Sales_Zscore Sales_Rank
0 Electronics USA NaN 1.000000 3.0
1 Clothing UK 50 -1.000000 2.0
2 Electronics Canada 75 1.000000 1.0
3 Clothing USA NaN -1.000000 3.0
4 Home Goods Germany 80 1.000000 2.0
5 Electronics UK 90 1.000000 2.0
6 Clothing Canada 45 -1.000000 1.0
7 Home Goods Germany 70 -1.000000 1.0
و پس از پر کردن مقادیر از دست رفته:
Category Country Sales Sales_Zscore Sales_Rank Sales_Filled
0 Electronics USA NaN 1.000000 3.0 NaN
1 Clothing UK 50 -1.000000 2.0 50.0
2 Electronics Canada 75 1.000000 1.0 75.0
3 Clothing USA NaN -1.000000 3.0 NaN
4 Home Goods Germany 80 1.000000 2.0 80.0
5 Electronics UK 90 1.000000 2.0 90.0
6 Clothing Canada 45 -1.000000 1.0 45.0
7 Home Goods Germany 70 -1.000000 1.0 70.0
نکته مهم: از آنجایی که میانگین موجود برای USA وجود نداشت، مقادیر حاصل در Sales_Filled برابر با NaN هستند. رسیدگی به موارد حاشیه ای مانند این برای تجزیه و تحلیل داده های قابل اعتماد بسیار مهم است و باید در طول پیاده سازی در نظر گرفته شود.
تجمیع در مقابل تبدیل: تفاوت های کلیدی
در حالی که هم تجمیع و هم تبدیل عملیات های قدرتمند GroupBy هستند، اهداف مختلفی را دنبال می کنند و ویژگی های متمایزی دارند:
- شکل خروجی: تجمیع، اندازه داده ها را کاهش می دهد، و یک مقدار واحد برای هر گروه برمی گرداند. تبدیل، اندازه داده های اصلی را حفظ می کند، و یک مقدار تبدیل شده برای هر ردیف برمی گرداند.
- هدف: تجمیع برای خلاصه کردن داده ها و به دست آوردن بینش در مورد ویژگی های گروه استفاده می شود. تبدیل برای تغییر داده ها در گروه ها استفاده می شود، اغلب برای استانداردسازی یا نرمال سازی.
- مقدار بازگشتی: تجمیع یک DataFrame یا Series جدید با مقادیر تجمیع شده برمی گرداند. تبدیل یک Series با مقادیر تبدیل شده برمی گرداند، که سپس می تواند به عنوان یک ستون جدید به DataFrame اصلی اضافه شود.
انتخاب بین تجمیع و تبدیل به اهداف تحلیلی خاص شما بستگی دارد. اگر نیاز دارید داده ها را خلاصه کنید و گروه ها را مقایسه کنید، تجمیع انتخاب مناسبی است. اگر نیاز دارید داده ها را در گروه ها تغییر دهید در حالی که ساختار داده های اصلی را حفظ می کنید، تبدیل گزینه بهتری است.
تکنیک های پیشرفته GroupBy
فراتر از تجمیع و تبدیل اساسی، Pandas GroupBy طیف وسیعی از تکنیک های پیشرفته را برای تجزیه و تحلیل داده های پیچیده تر ارائه می دهد.
اعمال توابع سفارشی با apply()
روش apply() بیشترین انعطاف پذیری را فراهم می کند و به شما امکان می دهد هر تابع سفارشی را به هر گروه اعمال کنید. این تابع می تواند هر عملیاتی، از جمله تجمیع، تبدیل، یا حتی محاسبات پیچیده تر را انجام دهد.
def custom_function(group):
# Calculate the sum of sales for each category in a group, only if there is more than one row in the group
if len(group) > 1:
group['Sales_Sum'] = group['Sales'].sum()
else:
group['Sales_Sum'] = 0 # Or some other default value
return group
df_applied = df.groupby('Country').apply(custom_function)
print(df_applied)
در این مثال، ما یک تابع سفارشی تعریف می کنیم که مجموع فروش را در هر گروه (کشور) محاسبه می کند. روش apply() این تابع را به هر گروه اعمال می کند، و در نتیجه یک ستون جدید حاوی مجموع فروش برای آن گروه می شود.
نکته مهم: تابع apply می تواند از نظر محاسباتی فشرده تر از سایر روش ها باشد. کد خود را بهینه کنید و هنگام کار با مجموعه داده های عظیم، پیاده سازی های جایگزین را در نظر بگیرید.
گروه بندی بر اساس چندین ستون
می توانید داده های خود را بر اساس چندین ستون گروه بندی کنید تا بخش های دانه ای تری ایجاد کنید. این به شما امکان می دهد داده ها را بر اساس تقاطع چندین ویژگی تجزیه و تحلیل کنید.
category_country_sales = df.groupby(['Category', 'Country'])['Sales'].sum()
print(category_country_sales)
این داده ها را هم بر اساس Category و هم Country گروه بندی می کند، و به شما امکان می دهد کل فروش را برای هر دسته بندی در هر کشور محاسبه کنید. این یک دیدگاه دقیق تر از عملکرد فروش در مناطق و خطوط تولید مختلف ارائه می دهد.
تکرار از طریق گروه ها
برای تجزیه و تحلیل پیچیده تر، می توانید از طریق گروه ها با استفاده از یک حلقه for تکرار کنید. این به شما امکان می دهد به هر گروه به صورت جداگانه دسترسی داشته باشید و عملیات سفارشی را روی آن انجام دهید.
for name, group in df.groupby('Category'):
print(f"Category: {name}")
print(group)
این از طریق هر دسته بندی محصول تکرار می شود و داده های مربوطه را چاپ می کند. این می تواند برای انجام تجزیه و تحلیل سفارشی یا تولید گزارش برای هر دسته بندی مفید باشد.
بهترین شیوه ها برای استفاده از GroupBy
برای اطمینان از استفاده کارآمد و موثر از GroupBy، بهترین شیوه های زیر را در نظر بگیرید:
- داده های خود را درک کنید: قبل از اعمال
GroupBy، وقت بگذارید تا داده های خود را درک کنید و معیارهای گروه بندی مربوطه و توابع تجمیع/تبدیل را شناسایی کنید. - عملیات مناسب را انتخاب کنید: به دقت در نظر بگیرید که آیا تجمیع یا تبدیل انتخاب مناسبی برای اهداف تحلیلی شما است.
- بهینه سازی برای عملکرد: برای مجموعه داده های بزرگ، بهینه سازی کد خود را با استفاده از عملیات برداری و اجتناب از حلقه های غیر ضروری در نظر بگیرید.
- رسیدگی به مقادیر از دست رفته: از مقادیر از دست رفته در داده های خود آگاه باشید و با استفاده از روش هایی مانند
fillna()یاdropna()به طور مناسب به آنها رسیدگی کنید. - مستندسازی کد خود: کد خود را به وضوح مستند کنید تا هدف هر عملیات
GroupByو استدلال پشت انتخاب های خود را توضیح دهید.
نتیجه گیری
Pandas GroupBy یک ابزار قدرتمند برای تجزیه و تحلیل داده ها است، که شما را قادر می سازد داده های خود را تقسیم بندی کنید، توابعی را به هر گروه اعمال کنید، و بینش های ارزشمندی را استخراج کنید. با تسلط بر تکنیک های تجمیع و تبدیل، می توانید پتانسیل کامل داده های خود را باز کنید و درک عمیق تری از الگوها و روندهای اساسی به دست آورید. چه در حال تجزیه و تحلیل داده های فروش، داده های حسگر، یا فعالیت رسانه های اجتماعی باشید، GroupBy می تواند به شما در تصمیم گیری های مبتنی بر داده کمک کند و به اهداف تحلیلی خود برسید. قدرت GroupBy را در آغوش بگیرید و مهارت های تجزیه و تحلیل داده خود را به سطح بعدی ارتقا دهید.
این راهنما یک نمای کلی جامع از عملیات Pandas GroupBy با تمرکز بر تجمیع در مقابل تبدیل ارائه کرده است. دانشمندان داده در سراسر جهان با استفاده از این تکنیک ها در داده های بین المللی، قادر به استخراج بینش های تجاری مهم در مجموعه داده های متنوع هستند. تمرین کنید، آزمایش کنید، و این تکنیک ها را متناسب با نیازهای خاص خود تنظیم کنید تا از پتانسیل کامل Pandas استفاده کنید.